// 处理所有的请求函数封装的文件

const { layer } = window.layui;

// (一)设置全局的基地址,自动拼接到请求的地址前面
axios.defaults.baseURL = `http://api-breakingnews-web.itheima.net`;

// 一、添加请求拦截器
axios.interceptors.request.use(function(config) {
    // 在发送请求之前做些什么
    // 根据需求设置是否携带token
    // 1.1 获取token
    const token = localStorage.getItem('token');
    // 1.2 判断如果请求是登录和注册,就不需要携带token
    if (config.url != '/api/login' && config.url != '/api/reguser') {
        config.headers.Authorization = token;
    }
    // console.log(config);
    // debugger

    return config;
}, function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 二、添加响应拦截器
axios.interceptors.response.use(function(response) {
    // 对响应数据做点什么
    // console.log(response);
    // 2.1 获取服务器响应的数据,解构出我们想要的数据
    const { status, message } = response.data;
    // 2.2 判断服务器响应的状态码,分别给出提示
    if (status == 0) {
        layer.msg(`${message}`, {
            icon: 1,
            time: 2000 //2秒关闭（如果不配置，默认是3秒）
        })
    }
    if (status == 1) {
        layer.msg(`${message}`, {
            icon: 2,
            time: 2000 //2秒关闭（如果不配置，默认是3秒）
        });
        // setTimeout(() => {
        // parent.location.href = '/login.html'
        // }, 1000)
    }

    return response;
}, function(error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});

// 三、处理注册请求的函数
const postReguser = (dataStr, cb) => {
    axios.post(`/api/reguser`, dataStr)
        .then((res) => {
            cb(res) // 实参
        })
}

// 四、处理登录请求的函数
const postLogin = (dataStr, cb) => {
    axios.post(`/api/login`, dataStr)
        .then((res) => {
            cb(res) // 实参
        })
}

// 五、处理获取用户信息请求的函数
const getUserInfo = (cb) => {
    axios.get(`/my/userinfo`)
        .then((res) => {
            cb(res) // 实参
        })
}

// 六、处理更新用户信息请求的函数
const postUserInfo = (dataStr, cb) => {
    axios.post(`/my/userinfo`, dataStr)
        .then((res) => {
            cb(res) // 实参
        })
}

// 七、更新密码的请求函数
const postUpDatePwd = (dataStr, cb) => {
    axios.post(`/my/updatepwd`, dataStr)
        .then((res) => {
            cb(res) // 实参
        })
}

// 八、更换头像的请求函数
const postAvatar = (dataStr, cb) => {
    axios.post(`/my/update/avatar`, dataStr)
        .then(res => {
            cb(res)
        })
}

// 九、获取文章类别的请求函数
const getCates = (cb) => {
    axios.get(`/my/article/cates`)
        .then((res) => {
            cb(res) // 实参
        })
}

// 十、新增文章分类
const postAddCates = (dataStr, cb) => {
    axios.post(`/my/article/addcates`, dataStr)
        .then(res => {
            cb(res)
        })
}

// 十一、修改文章分类的函数
const postUpDateCate = (dataStr, cb) => {
    axios.post(`/my/article/updatecate`, dataStr)
        .then(res => {
            cb(res)
        })
}

// 十二、删除文章分类的请求函数
// 
const getDeleteCates = (id, cb) => {
    axios.get(`/my/article/deletecate/${id}`)
        .then((res) => {
            cb(res) // 实参
        })
}

// 十三、发布新文章
const postArticleAdd = (data, cb) => {
    axios.post(`/my/article/add`, data)
        .then(res => {
            cb(res)
        })
}

// 十四、获取文章的列表数据请求函数
const getArticleList = (dataObj, cb) => {
    axios.get(`/my/article/list`, { params: dataObj })
        .then((res) => {
            cb(res) // 实参
        })
}

// 十五、删除文章功能的请求函数
const getArticleDelete = (id, cb) => {
    axios.get(`/my/article/delete/${id}`)
        .then((res) => {
            cb(res) // 实参
        })
}

// 十六、编辑文章功能的请求函数
const postArticleEdit = (data, cb) => {
    axios.post(`/my/article/edit`, data)
        .then(res => {
            cb(res)
        })
}

// 十七、通过id搜索文章的请求函数
const getArticleById = (id, cb) => {
    axios.get(`/my/article/${id}`)
        .then((res) => {
            cb(res) // 实参
        })
}